home *** CD-ROM | disk | FTP | other *** search
/ NetNews Offline 2 / NetNews Offline Volume 2.iso / news / comp / lang / c-part1 / 6264 < prev    next >
Encoding:
Text File  |  1996-08-05  |  1.8 KB  |  62 lines

  1. Path: swidir.switch.ch!epflnews!Thomas.Wolf
  2. From: Thomas.Wolf@di.epfl.ch (Thomas Wolf)
  3. Newsgroups: comp.lang.c
  4. Subject: Re: returning ptr to struct with ptrs in it?
  5. Date: 23 Feb 1996 15:51:17 GMT
  6. Organization: Ecole Polytechnique FΘdΘrale de Lausanne
  7. Sender: wolf@lglsun5.epfl.ch (Thomas Wolf)
  8. Message-ID: <4gknpl$3nn@info.epfl.ch>
  9. References: <4gk852INNbp4@faatcrl.faa.gov>
  10. NNTP-Posting-Host: lglsun5.epfl.ch
  11.  
  12. In article <4gk852INNbp4@faatcrl.faa.gov>, lbona@saratoga (lbona) writes:
  13. [Snip]
  14. :> When I declare a function that returns a pointer to a struct that contains 
  15. :> pointers, the pointer(s) at the end of the struct get set to garbage after 
  16. :> being returned. Pointers not at the end are not affected.
  17.  
  18. :> typedef struct bar {
  19. [Snip]
  20. :> } BAR;
  21. :> 
  22. :> BAR *parse_bar(char toke[]);
  23. :> 
  24. :> main()
  25. :> {
  26. :> BAR BB;
  27. [Snip]
  28. :>   BB = *parse_bar(toke);
  29. [Snip]
  30. :> }
  31.  
  32. :> BAR *parse_bar(char toke[]);
  33. :> {
  34. :> BAR bb;
  35. :> 
  36. :>   memset(&bb,0,sizeof(BAR));
  37. [Snip]
  38. :>   /* read data from file and parse - never touch bb.d, bb.g, or bb.h */
  39. [Snip]
  40. :>   return(&bb);
  41. :> }
  42. [Snip]
  43.  
  44. In 'parse_bar' you return the address of a local variable. After 'parse_bar'
  45. has returned, this variable doesn't live anymore! Thus, the pointer you
  46. returned points to memory which is no longer valid, and of course you'll
  47. end up with garbage in 'BB' in 'main'. Either return the whole structure,
  48. not just a pointer to the local 'bb', or - as you said - pass a pointer to
  49. 'BB' to 'parse_bar'.
  50.  
  51. Regards,
  52.  
  53.   Thomas
  54. ----------------------------------------------------------------------
  55. Swiss Federal Institute of Technology | Thomas Wolf
  56. Software Engineering Laboratory       | EPFL-DI-LGL
  57. Thomas Wolf (TW)                      | CH-1015 Lausanne (Suisse)
  58. E-Mail: wolf@di.epfl.ch               | Phone: (++41 21)693 42 37
  59. ---------------------------------------------------------------------- 
  60.  
  61.  
  62.